# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：DoubanFlask
#   文件名：app.py
# 开发时间：2021/4/4 19:11

from flask import Flask, render_template, request  # 引入Flask库
from matplotlib import pyplot as plt  # 负责绘图的模块
import jieba  # 提供分词、识词过滤模块
from wordcloud import WordCloud  # 词云，形成有遮罩效果的图形
from PIL import Image  # 图像处理，如图形虚化、验证码、图片后期处理等
import numpy as np  # 矩阵运算，中文显示需要运算空间
import sqlite3  # 对数据库的字词整合

app = Flask(__name__)  # 通过实例化初始化这个类，创建一个程序对象app。


@app.route('/')
def index():
    return render_template('index.html')  # 表单页面


@app.route('/movie')
def movie():
    datalist = []  # 保存取出的每个电影item的信息
    conn = sqlite3.connect('data/movie250.db')
    cur = conn.cursor()
    sql = "select * from movie"
    data = cur.execute(sql)  # 二重列表
    for item in data:
        datalist.append(item)
    cur.close()
    conn.close()
    return render_template('movie.html', movies=datalist)  # 表单页面


@app.route('/score')
def score():
    score1 = []  # 评分组数
    num = []  # 没组评分数量高度
    conn = sqlite3.connect('data/movie250.db')
    cur = conn.cursor()
    sql = "select score,count(score) from movie group by score"
    data = cur.execute(sql)  # 二重列表
    for item in data:
        score1.append(str(item[0]))
        num.append(item[1])
    cur.close()
    conn.close()
    return render_template('score.html', score=score1, num=num)  # 评分页面


@app.route('/word')
def word():
    # 准备词云所需的文字
    conn = sqlite3.connect('data/movie250.db')
    cur = conn.cursor()
    sql = 'select summarize from movie'
    text = ""
    data = cur.execute(sql)
    for item in data:
        text += item[0]
    cur.close()
    conn.close()
    # jieba库将词拆分出来
    cut = jieba.cut(text)
    string = ' '.join(cut)  # 分词拼接
    print(len(string))  # 计算分词数量
    img = Image.open('static/assets/img/wordcloud/backgroud.png')  # 打开遮罩图片
    img_array = np.array(img)  # 将图片转换为数组，进行计算
    wc = WordCloud(
        background_color='white',
        mask=img_array,
        font_path='msyh.ttc'
    )
    wc.generate_from_text(string)
    # 绘制图片
    fig = plt.figure(1)
    plt.imshow(wc)
    plt.axis('off')
    # 保存图片
    plt.savefig('static/assets/img/wordcloud/wordcloud.jpg', dpi=300)
    # plt.show()  # 显示词云生成的图片
    return render_template('word.html')  # 词云页面


@app.route('/temp')
def temp():
    return render_template('temp.html')  # 表单页面


@app.route('/team')
def team():
    return render_template('team.html')  # 表单页面


if __name__ == '__main__':
    app.run()